#include "common.h"
#ifndef __COMMONFUN_H__
#define __COMMONFUN_H__

/**
 * @brief  打印行数据
 * @note   
 * @param  *row: 结构体Row的指针对象
 * @retval None
 */
void print_row(Row *row);

/**
 * @brief  序列化数据库的行数据
 * @note   
 * @param  *source:      Row结构体指针对象
 * @param  *destination: 目标值
 * @retval None
 */
void serialize_row(Row *source, void *destination);

/**
 * @brief  反序列化数据库的行数据
 * @note   
 * @param  *source:      Row结构体指针对象
 * @param  *destination: 目标值
 * @retval None
 */
void deserialize_row(void *source, Row *destination);

/**
 * @brief  行槽
 * @note   
 * @param  *table:  数据库表的结构体指针对象
 * @param  row_num: 数据库表中的行数
 * @retval None
 */
void *row_slot(Table *table, uint32_t row_num);

/**
 * @brief  创建一个数据库表
 * @note   
 * @retval 
 */
Table *create_table();

/**
 * @brief  释放数据库表占用的内存资源
 * @note   
 * @param  *table: 数据库表结构体指针对象
 * @retval None
 */
void free_table(Table *table);

/**
 * @brief  执行插入sql语句，并把数据存放到数据库表中
 * @note   
 * @param  *statement: sql插入语句指针对象
 * @param  *table:     数据库表结构体指针对象
 * @retval 
 */
ExecuteResult execute_insert(Statement *statement, Table *table);

/**
 * @brief  执行查询sql语句，并打印
 * @note   
 * @param  *statement: 查询色sql语句
 * @param  *table:     数据库表结构体指针对象
 * @retval 
 */
ExecuteResult execute_select(Statement *statement, Table *table);

/**
 * @brief  执行sql语句，并调用execute_insert和execute_select方法执行
 * @note   
 * @param  *statement: sql语句指针对象
 * @param  *table:     数据库表结构体指针对象
 * @retval 
 */
ExecuteResult execute_statement(Statement *statement, Table *table);

/**
 * @brief  处理.exit类型的元命令
 * @note   
 * @param  inputBuffer: 输入的数据
 * @retval 返回MetaCommandResult定义的枚举类型的值
 */
MetaCommandResult deal_meta_command(InputBuffer *inputBuffer, Table *table);
#endif